package com.kmxd.ams.infra.arrange.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kmxd.ams.core.common.annotation.DataScope;
import com.kmxd.ams.core.common.enums.DataScopeTypeEnum;
import com.kmxd.ams.infra.arrange.entity.Document;
import java.util.List;
import java.util.Set;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 文件级 Mapper 接口
 *
 * @author ZuoLG
 * @since 2022-07-20
 */
public interface DocumentMapper extends BaseMapper<Document> {

  /**
   * 获取删除的分页数据
   *
   * @param page
   * @param tableId
   * @param doc
   * @return
   */
  @DataScope(type = DataScopeTypeEnum.ARCHIVES)
  Page<Document> selectDelByPage(
      Page<Document> page, @Param("tableId") String tableId, @Param("doc") Document doc);

  /**
   * 重新实现 查询列表方法
   *
   * @param queryWrapper
   * @return
   */
  @Override
  @DataScope(type = DataScopeTypeEnum.ARCHIVES)
  List<Document> selectList(@Param("ew") Wrapper<Document> queryWrapper);

  List<Document> selectListNoDataScope(@Param("ew") Wrapper<Document> queryWrapper);


  /**
   * 分页查询档案库
   *
   * @param page
   * @param queryWrapper
   * @param <P>
   * @return
   */
  @Override
  @DataScope(type = DataScopeTypeEnum.ARCHIVES)
  <P extends IPage<Document>> P selectPage(P page, @Param("ew") Wrapper<Document> queryWrapper);

  /**
   * 统计重写
   *
   * @param queryWrapper
   * @return
   */
  @DataScope(type = DataScopeTypeEnum.ARCHIVES)
  @Override
  Long selectCount(@Param("ew") Wrapper<Document> queryWrapper);

  /**
   * 恢复数据
   *
   * @param tableId
   * @param ids
   */
  void recoveryData(String tableId, Set<Long> ids);

  /**
   * 真删除
   *
   * @param tableId
   * @param ids
   */
  void deletion(String tableId, Set<Long> ids);

  @Select("select * from ${tableId} where id = #{id}") Document selectOneIgnoreDelFlag(String tableId, Long id);

  /**
   * 统计项目下案卷信息
   *
   * @param tableId
   * @return
   */
  @DataScope(type = DataScopeTypeEnum.ARCHIVES)
  @Select(
      "SELECT count( 1 ) total,status,proj_id,vol_id FROM ${tableId} GROUP BY status,proj_id,vol_id") List<Document> statisticProjByVol(String tableId);

  /**
   * 查询忽略全宗
   *
   * @param tableId
   * @param ids
   * @return
   */
  @Select("SELECT * FROM ${tableId} where id in (${ids})") List<Document> selectListIgnoreFonds(String tableId, String ids);
}
